// Copyright (C) 2004-2009
// Alex Turbov, Igor Veresov
//
//  Distributed under the Boost Software License, Version 1.0. (See accompanying
//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

#include <boost/mpl/list.hpp>
#include <boost/mpl/list_c.hpp>
#include <boost/mpl/pair.hpp>
#include <boost/mpl/integral_c.hpp>

namespace tests {

struct custom_matrix
{
    enum type
    {
        lock_one
      , lock_two
      , lock_both
    };
    typedef boost::mpl::list<                               //      | One | Two | Both
        boost::mpl::pair<                                   // -----------------------
            boost::mpl::integral_c<type, lock_one>          //      |     |     |
          , boost::mpl::list_c<bool, false, true, false>    // One  |  0  |  1  |  0
          >                                                 //      |     |     |
      , boost::mpl::pair<                                   // -----------------------
            boost::mpl::integral_c<type, lock_two>          //      |     |     |
          , boost::mpl::list_c<bool, true, false, false>    // Two  |  1  |  0  |  0
          >                                                 //      |     |     |
      , boost::mpl::pair<                                   // -----------------------
            boost::mpl::integral_c<type, lock_both>         //      |     |     |
          , boost::mpl::list_c<bool, false, false, false>   // Both |  0  |  0  |  0
          >                                                 //      |     |     |
    > matrix_type;
};

}                                                           // namespace tests
